/**
 * 
 */
package com.nwpu.bigdata.dao;

import java.util.List;
import java.util.Map;

import com.nwpu.bigdata.model.FaultKeyExtend;
import org.joda.time.DateTime;

import com.nwpu.bigdata.model.ExceptLog;

/**
 * elasticsearch日志访问接口
 * 
 * @author zhanggr
 *
 */
public interface EsLogDao {

	/**
	 * 在ES中搜索日志
	 * 
	 * @param index
	 *            ES中需要检索的日志索引
	 * @param type
	 *            ES中需要检索的日志类型
	 * @param faultKeyExtend
	 *            ES中需要检索的日志关键字
	 * @param includes
	 *            ES中取回的数据需要包括的字段
	 * @param excludes
	 *            ES中取回的数据需要排除的字段
	 * @return List<ExceptLog> 以列表的形式返回查询的结果
	 */
	public List<ExceptLog> searchLog(String index, String type, FaultKeyExtend faultKeyExtend, String[] includes,
			String[] excludes);

	/**
	 * 在ES中根据用户指定的条件搜索日志
	 * 
	 * @param index
	 *            ES中需要检索的日志索引
	 * @param type
	 *            ES中需要检索的日志类型
	 * @param conditions
	 *            用户指定的查询条件
	 * @param startTime
	 *            查询时间范围的起点
	 * @param endTime
	 *            查询时间范围的终点
	 * @param faultKeyExtend
	 *            故障关键字扩展信息
	 * @return List<ExceptLog> 以列表的形式返回查询的结果
	 */
	public List<ExceptLog> searchLogByUser(String index, String type, Map<String, String[]> conditions,
			DateTime startTime, DateTime endTime, FaultKeyExtend faultKeyExtend);

	/**
	 * 在ES中插入日志信息
	 * 
	 * @param index
	 *            在ES中创建的索引
	 * @param type
	 *            在ES中创建的类型
	 * @param exceptLog
	 *            待插入的日志信息
	 */
	public void createIndex(String index, String type, ExceptLog exceptLog);

	/**
	 * 根据id获得单条日志信息
	 * 
	 * @param index
	 * @param type
	 * @param id
	 * @param includes
	 * @param excludes
	 * @param faultKeyExtend
	 * @return
	 */
	public ExceptLog getSingleLog(String index, String type, String id, String[] includes, String[] excludes,
			FaultKeyExtend faultKeyExtend);

	/**
	 * 在ES中批量创建多条日志
	 * 
	 * @param index
	 * @param type
	 * @param exceptLog
	 */
	public void bulkCreateIndex(String index, String type, ExceptLog[] exceptLog);

	/**
	 * 获取集群信息
	 */
	public void clusterInfo();

}
